Parametric overloading in polymorphic programming languages